home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / xwindows / demos / xfract_1.z / xfract_1 / xfractint-1.06 / fractint.c < prev    next >
C/C++ Source or Header  |  1992-09-28  |  48KB  |  1,515 lines

  1. /*
  2.     FRACTINT - The Ultimate Fractal Generator
  3.             Main Routine
  4. */
  5.  
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <time.h>
  10. #ifndef XFRACT
  11. #include <dos.h>
  12. #endif
  13. #include <ctype.h>
  14. #include "prototyp.h"
  15.  
  16. /* routines in this module    */
  17.  
  18. static void cmp_line_cleanup();
  19. static void move_zoombox(int);
  20. static int  call_line3d();
  21. static void clear_zoombox();
  22. static void note_zoom();
  23. static void restore_zoom();
  24. static void setup287code();
  25.  
  26. #define PUTTHEMHERE 1        /* stuff common external arrays here */
  27.  
  28. #include "fractint.h"
  29. #include "mpmath.h"
  30. #include "fractype.h"
  31. #include "helpdefs.h"
  32.  
  33. int    adapter;        /* Video Adapter chosen from list in ...h */
  34.  
  35. extern int soundflag;
  36.  
  37. extern char gifmask[];
  38. extern int TPlusErr;
  39.  
  40. extern int Transparent3D, far NewTPFractal, tpdepth;
  41. extern int AntiAliasing, Shadowing;
  42. extern int pot16bit;        /* save 16 bit values for continuous potential */
  43. extern int disk16bit;        /* disk video up & running with 16 bit values */
  44. extern int video_type;        /* coded value indicating video adapter type */
  45. extern int usr_biomorph;
  46. extern int escape_exit;
  47. extern int forcesymmetry;
  48. extern    char    readname[];    /* name of fractal input file */
  49. extern    int    showfile;    /* zero if display of file is pending */
  50. #define MAXHISTORY    25    /* save this many historical rcds */
  51. struct historystruct {        /* history structure */
  52.     int fractype;        /* fractal type */
  53. /*    double param[2];*/    /* parameters */
  54.     double param[4];    /* parameters JCO 6/18/92 */
  55.     double xxmin;        /* top left    */
  56.     double yymax;        /* top left    */
  57.     double xxmax;        /* bottom right */
  58.     double yymin;        /* bottom right */
  59.     double xx3rd;        /* bottom left    */
  60.     double yy3rd;        /* bottom left    */
  61.     } far *history;
  62.  
  63. #ifdef __TURBOC__
  64.  
  65. /* yes, I *know* it's supposed to be compatible with Microsoft C,
  66.    but some of the routines need to know if the "C" code
  67.    has been compiled with Turbo-C.  This flag is a 1 if FRACTINT.C
  68.    (and presumably the other routines as well) has been compiled
  69.    with Turbo-C. */
  70. int compiled_by_turboc = 1;
  71.  
  72. /* set size to be used for overlays, a bit bigger than largest (help) */
  73. unsigned _ovrbuffer = 50 * 64; /* that's 50k for overlays, counted in paragraphs */
  74.  
  75. #else
  76.  
  77. int compiled_by_turboc = 0;
  78.  
  79. #endif
  80.  
  81. extern char savename[];     /* save files using this name */
  82. extern char preview;        /* 3D preview mode flag */
  83. extern char temp1[];        /* temporary strings        */
  84. extern int  debugflag;        /* internal use only - you didn't see this */
  85.  
  86. /*
  87.    the following variables are out here only so
  88.    that the calcfract() and assembler routines can get at them easily
  89. */
  90.     int    active_system = 0;    /* 0 for DOS, WINFRAC for Windows */
  91.     int    dotmode;        /* video access method        */
  92.     int    textsafe2;        /* textsafe override from videotable */
  93.     int    oktoprint;        /* 0 if printf() won't work */
  94.     int    sxdots,sydots;        /* # of dots on the physical screen    */
  95.     int    sxoffs,syoffs;        /* physical top left of logical screen */
  96.     int    xdots, ydots;        /* # of dots on the logical screen     */
  97.     double    dxsize, dysize;     /* xdots-1, ydots-1        */
  98.     int    colors;         /* maximum colors available */
  99.     int    maxit;            /* try this many iterations */
  100.     int    boxcount;        /* 0 if no zoom-box yet     */
  101.     int    zrotate;        /* zoombox rotation        */
  102.     double    zbx,zby;        /* topleft of zoombox        */
  103.     double    zwidth,zdepth,zskew;    /* zoombox size & shape     */
  104.  
  105.     int    fractype;        /* if == 0, use Mandelbrot  */
  106.     char    stdcalcmode;        /* '1', '2', 'g', 'b'       */
  107.     long    creal, cimag;        /* real, imag'ry parts of C */
  108.     long    delx, dely;        /* screen pixel increments  */
  109.     long    delx2, dely2;        /* screen pixel increments  */
  110.     double    delxx, delyy;        /* screen pixel increments  */
  111.     double    delxx2, delyy2;     /* screen pixel increments  */
  112.     long    delmin;         /* for calcfrac/calcmand    */
  113.     double    ddelmin;        /* same as a double        */
  114.     double    param[4];        /* up to four parameters    */
  115.     double    potparam[3];        /* three potential parameters*/
  116.     long    fudge;            /* 2**fudgefactor        */
  117.     long    l_at_rad;        /* finite attractor radius  */
  118.     double    f_at_rad;        /* finite attractor radius  */
  119.     int    bitshift;        /* fudgefactor            */
  120.  
  121.     int    badconfig = 0;        /* 'fractint.cfg' ok?       */
  122.     int    diskisactive;        /* disk-video drivers flag  */
  123.     int    diskvideo;        /* disk-video access flag   */
  124.  
  125.     /* note that integer grid is set when integerfractal && !invert;    */
  126.     /* otherwise the floating point grid is set; never both at once     */
  127.     long    far *lx0, far *ly0;    /* x, y grid            */
  128.     long    far *lx1, far *ly1;    /* adjustment for rotate    */
  129.     /* note that lx1 & ly1 values can overflow into sign bit; since     */
  130.     /* they're used only to add to lx0/ly0, 2s comp straightens it out  */
  131.     double far *dx0, far *dy0;    /* floating pt equivs */
  132.     double far *dx1, far *dy1;
  133.     int    integerfractal;     /* TRUE if fractal uses integer math */
  134.  
  135.     /* usr_xxx is what the user wants, vs what we may be forced to do */
  136.     char    usr_stdcalcmode;
  137.     int    usr_periodicitycheck;
  138.     int    usr_distest;
  139.     char    usr_floatflag;
  140.  
  141.     int    viewwindow;        /* 0 for full screen, 1 for window */
  142.     float    viewreduction;        /* window auto-sizing */
  143.     int    viewcrop;        /* nonzero to crop default coords */
  144.     float    finalaspectratio;    /* for view shape and rotation */
  145.     int    viewxdots,viewydots;    /* explicit view sizing */
  146. extern    int    inside;         /* inside color: 1=blue     */
  147. extern    int    outside;        /* outside color, if set    */
  148. extern    int    cyclelimit;        /* color-rotator upper limit */
  149. extern    int    display3d;        /* 3D display flag: 0 = OFF */
  150. extern    int    overlay3d;        /* 3D overlay flag: 0 = OFF */
  151. extern    int    boxcolor;        /* zoom box color */
  152. extern    int    color_bright;        /* set by find_special_colors */
  153.  
  154. #ifndef XFRACT
  155. extern BYTE dacbox[256][3];    /* Video-DAC (filled in by SETVIDEO) */
  156. extern BYTE olddacbox[256][3]; /* backup copy of the Video-DAC */
  157. #else
  158. BYTE dacbox[256][3];   /* Video-DAC (filled in by SETVIDEO) */
  159. BYTE olddacbox[256][3]; /* backup copy of the Video-DAC */
  160. #endif
  161. extern struct videoinfo far videotable[];
  162. extern BYTE far *mapdacbox;    /* default dacbox when map= specified */
  163. extern int    daclearn, daccount;    /* used by the color-cyclers */
  164. extern int    extraseg;        /* used by Save-to-DISK routines */
  165. extern int    cpu;            /* cpu type            */
  166. extern int    fpu;            /* fpu type            */
  167. extern int    iit;            /* iit fpu?            */
  168. extern int    lookatmouse;        /* used to select mouse mode    */
  169. extern int    (*outln)(BYTE *, int);    /* called in decoder */
  170.        void    (*outln_cleanup)();
  171. extern int    filetype;        /* GIF or other */
  172.  
  173. /* variables defined by the command line/files processor */
  174. extern    double    inversion[];
  175. extern    int    invert;         /* non-zero if inversion active */
  176. extern    int    initbatch;        /* 1 if batch run (no kbd)  */
  177. extern    int    initmode;        /* initial video mode        */
  178. extern    int    goodmode;        /* video.asm sets nonzero if mode ok */
  179. extern    int    initcyclelimit;     /* initial cycle limit        */
  180. extern    int    LogFlag;        /* non-zero if logarithmic palettes */
  181. extern    int    reallyega;        /* == 0 if it's really an EGA */
  182.  
  183. extern char showbox;        /* flag to show box and vector in preview */
  184. extern unsigned initsavetime;    /* timed save interval */
  185.  
  186. int    comparegif=0;            /* compare two gif files flag */
  187. int    timedsave=0;            /* when doing a timed save */
  188. extern long saveticks, savebase;    /* timed save vars for general.asm */
  189. extern int  finishrow;            /* for general.asm timed save */
  190. int    resave_flag=0;            /* tells encoder not to incr filename */
  191. int    started_resaves=0;        /* but incr on first resave */
  192. int    save_release,save_system;    /* from and for save files */
  193. int    tabmode = 1;            /* tab display enabled */
  194. extern    int release;            /* real current Fractint release */
  195. extern    int got_status;
  196. extern    int loaded3d;
  197. extern    int colorstate,colorpreloaded;    /* comments in cmdfiles */
  198. extern int functionpreloaded; /* set in cmdfiles for old bifs JCO 7/5/92 */
  199.  
  200. #ifdef XFRACT
  201. char **__argv;
  202. extern int XZoomWaiting;
  203. #endif
  204.  
  205. /* for historical reasons (before rotation):         */
  206. /*    top    left  corner of screen is (xxmin,yymax) */
  207. /*    bottom left  corner of screen is (xx3rd,yy3rd) */
  208. /*    bottom right corner of screen is (xxmax,yymin) */
  209. double    xxmin,xxmax,yymin,yymax,xx3rd,yy3rd; /* selected screen corners  */
  210. long    xmin, xmax, ymin, ymax, x3rd, y3rd;  /* integer equivs         */
  211. double    sxmin,sxmax,symin,symax,sx3rd,sy3rd; /* displayed screen corners */
  212. double    plotmx1,plotmx2,plotmy1,plotmy2;     /* real->sc